package com.mazaiting.redeye.component;

import com.mazaiting.redeye.domain.Request;
import com.mazaiting.redeye.domain.UserBean;
import com.mazaiting.redeye.interfaces.ITokenManager;
import com.mazaiting.redeye.service.RedisService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import java.util.UUID;

/***
 *
 *
 *                                                    __----~~~~~~~~~~~------___
 *                                   .  .   ~~//====......          __--~ ~~
 *                   -.            \_|//     |||\\  ~~~~~~::::... /~
 *                ___-==_       _-~o~  \/    |||  \\            _/~~-
 *        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
 *    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
 *  .~       .~       |   \\ -_    /  /-   /   ||      \   /
 * /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
 * |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
 *          '         ~-|      /|    |-~\~~       __--~~
 *                      |-~~-_/ |    |   ~\_   _-~            /\
 *                           /  \     \__   \/~                \__
 *                       _--~ _/ | .-~~____--~-/                  ~~==.
 *                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
 *                                 -_     ~\      ~~---l__i__i__i--~~_/
 *                                 _-~-__   ~)  \--______________--~~
 *                               //.-~~~-~_--~- |-------~~~~~~~~
 *                                      //.-~~~--\
 *                               神兽保佑
 *                              代码无BUG!
 * @author mazaiting
 * @date 2019-06-27
 * @decription
 */
@Component
public class RedisTokenManager implements ITokenManager {
//    /**
//     * Token key
//     */
//    private static final String KEY_USER_INFO = "user_info";
    /**
     * 有效时间, 30 分钟
     */
//    private static final int VALID_TIME_DEFAULT = 60 * 30;
    // 100 秒
//    private static final int VALID_TIME_DEFAULT = 100;
    // 1 年
    private static final int VALID_TIME_DEFAULT = 60 * 60 * 24 * 365;

    /**
     * Redis 服务
     */
    private final RedisService mRedisService;

    @Autowired
    public RedisTokenManager(RedisService mRedisService) {
        this.mRedisService = mRedisService;
    }

    @Override
    public String getToken(String sessionId, Request<UserBean> requestBean) {
        // 使用 UUID 作为源
//        String uuid = UUID.randomUUID().toString().replace("-", "");
        // 获取 Token
        String token = UUID.randomUUID().toString().replace("-", "").toUpperCase();
        // 设置 Token
        requestBean.setToken(token);
        // 保存 Token
        mRedisService.set(sessionId, requestBean.toJson(), VALID_TIME_DEFAULT);
        return token;
    }

    @Override
    public void refreshUserToken(String sessionId) {
        // 检测是否存在该 key
        if (mRedisService.hasKey(sessionId)) {
            mRedisService.setExpireTime(sessionId, VALID_TIME_DEFAULT);
        }
    }

    @Override
    public void loginOut(String token) {

    }

    @Override
    public Request<UserBean> getUserBySessionId(String sessionId) {
        // 获取
        String string = mRedisService.get(sessionId);
        // 获取用户信息
        return StringUtils.isEmpty(string) ? null : new Request<UserBean>().fromJson(string);
    }


}
